import os
# La importancia de las características por permutación depende de la función de puntuación especificada mediante el argumento scoring (acepta múltiples funciones de puntuación).
# Si no se indica ningún puntaje utiliza el criterio de evaluación por defecto del estimador. Ver detalles de la implementación en ayuda sklearn
from sklearn.inspection import permutation_importance
resultado = permutation_importance(rf, X_test, y_test,
n_repeats=30,
random_state=42,
scoring='r2',
n_jobs=os.cpu_count()-2)
# Los valores de la importancia por permutation nos indican la fraccion de caida del puntaje de referencia (R2) al permutar un predictor (destruir la info de esa variable)
# Valores positivos y grandes: la variable es importante (su permutación empeora mucho el R2)
# Valores cercanos a 0: poca o nula importancia (el modelo predice casi igual sin esa variable)
# Valores negativos: la variable es perjudicial para el modelo (p.e. ruido). Al permutarla, el modelo mejora ligeramente
# IMPORTANTE: la interpretación es dependiente del scoring elegido
r2_test = rf.score(X_test,y_test)
print('R2 conjunto prueba:', r2_test)
df_imp = pd.DataFrame({
"Feature": rf.feature_names_in_,
"Importancia media": resultado.importances_mean,
"Desviación": resultado.importances_std
}).sort_values("Importancia media", ascending=False)
df_imp